package net.oschina.app.ui.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import net.oschina.app.R;

/**
 * @author U 自定义组合控件
 */
public class SettingItemView extends LinearLayout {

	private boolean mChecked;
	private TextView mTv;
	private ImageView mIv;
	private boolean mVisiable;
	private int mBg;
	private View mView;

	public SettingItemView(Context context) {// 在代码产生View的时候使用
		this(context, null);
	}

	public SettingItemView(Context context, AttributeSet attrs) {// 布局文件写的时候，会调用一个构造器
		this(context, attrs, 0);
		// AttributeSet：封装属性： android:layout_width="wrap_content"
	}

	public SettingItemView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// 代码只要这里处理就ok
		// xml---view
		mView = View.inflate(context, R.layout.view_setting_item, null);
		// view 添加到SettingItemView
		// 1 找到TextView

		mTv = (TextView) mView.findViewById(R.id.tv_setting_type);
		mIv = (ImageView) mView.findViewById(R.id.iv_setting_light);

		// 1 获取TypeArray
		// TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs)
		TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.SettingItemView);
		// 获取文本
		String text = ta.getString(R.styleable.SettingItemView_siv_text);
		// 获取是否开关
		mChecked = ta.getBoolean(R.styleable.SettingItemView_siv_checked, false);
		// 获取是否显示开关
		mVisiable = ta.getBoolean(R.styleable.SettingItemView_siv_visiable, true);
		// 获取背景
		mBg = ta.getInt(R.styleable.SettingItemView_siv_bg, -1);
		// 设置
		mTv.setText(text);
		setCheck();
		setVisiable();
		// 设置背景
		setBackGround();
		// 回收TypeArray
		ta.recycle();
		
		// 设置SettingItemView 默认可以点击
		setClickable(true);
		addView(mView);
	}

	// 设置背景
	private void setBackGround() {
		switch (mBg) {
		case 0: // first
			this.setBackgroundResource(R.drawable.first_bg_selector);
			break;
		case 1: // middle
			this.setBackgroundResource(R.drawable.middle_bg_selector);
			break;
		case 2:// last
			this.setBackgroundResource(R.drawable.last_bg_selector);
			break;
		default:
			this.setBackgroundResource(R.drawable.first_bg_selector);
			break;
		}
	}

	// 设置可不可见
	private void setVisiable() {
		mIv.setVisibility(mVisiable ? View.VISIBLE : View.INVISIBLE);
	}

	private void setCheck() {
		// if (mChecked) {
		// mIv.setImageResource(R.drawable.on);
		// } else {
		// mIv.setImageResource(R.drawable.off);
		// }
		// 三元运算
		mIv.setImageResource(mChecked ? R.drawable.on : R.drawable.off);
	}

	// 当开的时候，就关，关的时候，就开
	public void toggle() {
		// 更新checked的值
		mChecked = !mChecked;// true--false;false--true
		// 更新UI
		setCheck();
	}

	// 是否开着
	public boolean isChecked() {
		return mChecked;
	}

	public void setChecked(boolean checked) {
		// 1 mChecked 赋值
		mChecked=checked;
		// 2  更新UI
		setCheck();
	}

}
